home *** CD-ROM | disk | FTP | other *** search
- Program EX_0501;
- {Listing 9P - see documentation in TUTOR.SSS}
-
- uses SSS;
- { For Pascal other than Turbo/Quick erase above line }
-
- const
- ARRIVL = 1;
- STARTA = 2;
- ENDACT = 3;
- NEXTAC = 4;
- STRTDY = 5;
-
- CLOSES = 0;
- WATCH = 1;
-
- { For MS Pascal $include:'SSSP1.H' }
-
- var
- ecode : integer;
- opens, repars : Boolean;
- inter, rept : real;
-
- { For MS Pascal $include:'SSSP2.H' }
-
- procedure prime;
- begin
- INIQUE(3,1,1);
- INISTA(1,'Sojourn time',0,10,0.0,0.2);
-
- CREATE(0, WATCH );
- CREATE(0.5, CLOSES);
- SIMEND(10);
-
- opens := true;
- repars := false;
- inter := 7.0/25.0;
- rept := 2.0/24.0;
- end;
-
- procedure clshop;
- begin
- opens := false;
- while NQ(3) > 0 do
- begin
- REMVFQ(3,1);
- TALLY(1, T - A(1));
- DISPOS;
- end;
- end;
-
- procedure newday;
- begin
- CREATE(0.5, CLOSES);
- DISPOS;
- opens := true;
- repars := false;
-
- while NQ(1) > 0 do
- begin
- REMVFQ(1, 1);
- QUEUE(2, 0);
- end;
- end;
-
- begin
-
- prime;
-
- repeat
- ecode := NEXTEV;
- if ecode > 0 then
- begin
- case ecode of
-
- ARRIVL: begin
- if IDE = WATCH then
- begin
- CREATE(EX(inter), WATCH);
- SETA(1,T);
- SCHED(0, NEXTAC, WATCH );
- end
-
- else
- begin
- SCHED(0.5, STRTDY, CLOSES);
- clshop;
- end;
- end;
-
- NEXTAC: begin
- if opens then
- begin
- if repars then QUEUE(2, 0)
- else SCHED(0,STARTA,IDE);
- end else QUEUE(1, 0);
- end;
-
- STARTA: begin
- SCHED(EX(rept), ENDACT, 0);
- repars := true;
- end;
-
- ENDACT: begin
- QUEUE(3, 0);
- if NQ(2) > 0 then
- begin
- REMVFQ(2,1);
- SCHED(0, STARTA, 0);
- end else repars := false;
- end;
-
- STRTDY: newday;
- end;
- end;
- until ecode = 0;
-
- SUMRY('');
-
- end.